home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / pbmplus / pgm / libpgm2.c < prev    next >
Text File  |  1996-02-28  |  4KB  |  153 lines

  1. /* libpgm2.c - pgm utility library part 2
  2. **
  3. ** Copyright (C) 1989 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "pgm.h"
  14. #include "libpgm.h"
  15.  
  16. #if __STDC__
  17. void
  18. pgm_writepgminit( FILE* file, int cols, int rows, gray maxval, int forceplain )
  19. #else /*__STDC__*/
  20. void
  21. pgm_writepgminit( file, cols, rows, maxval, forceplain )
  22.     FILE* file;
  23.     int cols, rows;
  24.     gray maxval;
  25.     int forceplain;
  26. #endif /*__STDC__*/
  27.     {
  28. #ifdef PBMPLUS_RAWBITS
  29.     if ( maxval <= 255 && ! forceplain )
  30.     fprintf(
  31.         file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, RPGM_MAGIC2,
  32.         cols, rows, maxval );
  33.     else
  34.     fprintf(
  35.         file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, PGM_MAGIC2,
  36.         cols, rows, maxval );
  37. #else /*PBMPLUS_RAWBITS*/
  38.     fprintf(
  39.     file, "%c%c\n%d %d\n%d\n", PGM_MAGIC1, PGM_MAGIC2,
  40.     cols, rows, maxval );
  41. #endif /*PBMPLUS_RAWBITS*/
  42.     }
  43.  
  44. static void
  45. putus( n, file )
  46.     unsigned short n;
  47.     FILE* file;
  48.     {
  49.     if ( n >= 10 )
  50.     putus( n / 10, file );
  51.     (void) putc( n % 10 + '0', file );
  52.     }
  53.  
  54. #ifdef PBMPLUS_RAWBITS
  55. static void
  56. pgm_writepgmrowraw( file, grayrow, cols, maxval )
  57.     FILE* file;
  58.     gray* grayrow;
  59.     int cols;
  60.     gray maxval;
  61.     {
  62.     register int col;
  63.     register gray* gP;
  64.  
  65.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  66.     {
  67. #ifdef DEBUG
  68.     if ( *gP > maxval )
  69.         pm_error( "value out of bounds (%u > %u)", *gP, maxval );
  70. #endif /*DEBUG*/
  71.     (void) putc( *gP, file );
  72.     }
  73.     }
  74. #endif /*PBMPLUS_RAWBITS*/
  75.  
  76. static void
  77. pgm_writepgmrowplain( file, grayrow, cols, maxval )
  78.     FILE* file;
  79.     gray* grayrow;
  80.     int cols;
  81.     gray maxval;
  82.     {
  83.     register int col, charcount;
  84.     register gray* gP;
  85.  
  86.     charcount = 0;
  87.     for ( col = 0, gP = grayrow; col < cols; ++col, ++gP )
  88.     {
  89.     if ( charcount >= 65 )
  90.         {
  91.         (void) putc( '\n', file );
  92.         charcount = 0;
  93.         }
  94.     else if ( charcount > 0 )
  95.         {
  96.         (void) putc( ' ', file );
  97.         ++charcount;
  98.         }
  99. #ifdef DEBUG
  100.     if ( *gP > maxval )
  101.         pm_error( "value out of bounds (%u > %u)", *gP, maxval );
  102. #endif /*DEBUG*/
  103.     putus( (unsigned long) *gP, file );
  104.     charcount += 3;
  105.     }
  106.     if ( charcount > 0 )
  107.     (void) putc( '\n', file );
  108.     }
  109.  
  110. #if __STDC__
  111. void
  112. pgm_writepgmrow( FILE* file, gray* grayrow, int cols, gray maxval, int forceplain )
  113. #else /*__STDC__*/
  114. void
  115. pgm_writepgmrow( file, grayrow, cols, maxval, forceplain )
  116.     FILE* file;
  117.     gray* grayrow;
  118.     int cols;
  119.     gray maxval;
  120.     int forceplain;
  121. #endif /*__STDC__*/
  122.     {
  123. #ifdef PBMPLUS_RAWBITS
  124.     if ( maxval <= 255 && ! forceplain )
  125.     pgm_writepgmrowraw( file, grayrow, cols, maxval );
  126.     else
  127.     pgm_writepgmrowplain( file, grayrow, cols, maxval );
  128. #else /*PBMPLUS_RAWBITS*/
  129.     pgm_writepgmrowplain( file, grayrow, cols, maxval );
  130. #endif /*PBMPLUS_RAWBITS*/
  131.     }
  132.  
  133. #if __STDC__
  134. void
  135. pgm_writepgm( FILE* file, gray** grays, int cols, int rows, gray maxval, int forceplain )
  136. #else /*__STDC__*/
  137. void
  138. pgm_writepgm( file, grays, cols, rows, maxval, forceplain )
  139.     FILE* file;
  140.     gray** grays;
  141.     int cols, rows;
  142.     gray maxval;
  143.     int forceplain;
  144. #endif /*__STDC__*/
  145.     {
  146.     int row;
  147.  
  148.     pgm_writepgminit( file, cols, rows, maxval, forceplain );
  149.  
  150.     for ( row = 0; row < rows; ++row )
  151.      pgm_writepgmrow( file, grays[row], cols, maxval, forceplain );
  152.     }
  153.